package com.zzx.test.reflection;

import com.zzx.test.entity.Person;
import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @ClassName: ReflectionTest1
 * @Description: 反射测试类
 * @Author zhouzhixin
 * @Date 2021/12/3
 * @Version 1.0
 */
public class ReflectionTest1 {

    @Test
    public void test1() {
        try {
            // 根据全限定类名获取Class
            Class<?> aClass = Class.forName("com.zzx.test.entity.Person");
            if (aClass.newInstance() instanceof Person) {
                // 判断class是否为Person对象并转换
                Object instance = aClass.newInstance();
                // 获取公有方法
                Method hi = instance.getClass().getDeclaredMethod("hi");
                // 执行方法
                hi.invoke(instance);
                // 获取私有属性
                Field name = instance.getClass().getDeclaredField("name");
                // 私有内容需要设置可见性
                name.setAccessible(true);
                // 获取私有内容的值
                System.out.println(name.get(instance));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
